#ifndef SEMAPHORE_T_H
#define SEMAPHORE_T_H

class Semaphore_t
{
private:
    int value;  // 信号量的值
    int lock;   // 信号量锁

public:
    Semaphore_t();
    Semaphore_t(int value);             // 构造函数
    Semaphore_t& operator=(int value);  // 重载赋值运算符

    friend void P(Semaphore_t *pS);     // P操作
    friend void V(Semaphore_t *pS);     // V操作

    /*
     * 实际上信号量一般只能由 P、V 函数来访问
     * 除此之外不能通过任何方式访问
     * 这里为了实验的输出和监视的方便，对外提供一个可以获取信号量值的接口
     */
    friend int getSemaphoreValue(Semaphore_t *pS);
};


#endif